home *** CD-ROM | disk | FTP | other *** search
/ Cubase Magazine 30 / Issue #30.iso / pc / 2-SOFTWARE / RTEQ 3.0 / SRC / PREFERS.CPP < prev    next >
Encoding:
C/C++ Source or Header  |  2000-12-05  |  12.2 KB  |  298 lines

  1. /**********************************************************************************
  2. *                                                                                 *
  3. *    EQUALIZER.CPP: The main program, the core of this application                *
  4. *                                                                                 *
  5. *    Copyright (C) 2000  Andrei Grecu                                             *
  6. *                                                                                 *
  7. *    This program is free software; you can redistribute it and/or modify         *
  8. *    it under the terms of the GNU General Public License as published by         *
  9. *    the Free Software Foundation; either version 2 of the License, or            *
  10. *    (at your option) any later version.                                          *
  11. *                                                                                 *
  12. *    This program is distributed in the hope that it will be useful,              *
  13. *    but WITHOUT ANY WARRANTY; without even the implied warranty of               *
  14. *    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the                *
  15. *    GNU General Public License for more details.                                 *
  16. *                                                                                 *
  17. *    You should have received a copy of the GNU General Public License            *
  18. *    along with this program; if not, write to the Free Software                  *
  19. *    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA    *
  20. *                                                                                 *
  21. *    If you have questions, bug reports regarding my code please contact me at:   *
  22. *    andrei.grecu@aon.at                                                          *
  23. *                                                                                 *
  24. *    Home page:                                                                   *
  25. *    http://members.aon.at/grxpage/index.htm                                      *
  26. *                                                                                 *
  27. **********************************************************************************/
  28.  
  29. #include "precomp.h"
  30. #include "resource.h"
  31. #include <dsound.h>
  32.  
  33. #include "misc.h"
  34. #include "fdt.h"
  35.  
  36. extern HINSTANCE hInst;
  37.  
  38. extern LPVOID                AllocMemory(DWORD dwsize);
  39. #define                        FreeMemory(ptr)                 GlobalFree((HGLOBAL)ptr)
  40.  
  41. extern DWORD REC_PERIOD;
  42. extern DOUBLE DYNAMIC_RANGE_SCALE; 
  43. extern DWORD REC_FREQ;         
  44. extern DWORD REC_BASEBUFSIZE;
  45. extern BYTE REC_CHANNELS;          
  46. extern WORD NumSliders;
  47. extern DWORD PROGRAM_PRIORITY;
  48.  
  49. extern BOOL  DynamicEqualizing, BlurEQImpact;
  50. extern COEF  DYNAMIC_TRESHOLD;
  51.  
  52. extern BOOL EQThreadValid;
  53. extern HANDLE hEQThread;
  54.  
  55.  
  56. /*DWORD NumCaptureGUIDs = 0;
  57. LPGUID CaptureGUIDs = NULL;
  58.  
  59. BOOL DSCEnumCallback(LPGUID lpGuid, LPCSTR lpcstrDescription, LPCSTR lpcstrModule, LPVOID lpContext);*/
  60.  
  61. // Mesage handler for preferences dialog.
  62. LRESULT CALLBACK Preferences(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
  63. {
  64.     switch (message)
  65.     {
  66.         case WM_INITDIALOG:
  67.                     {
  68.                         LPSTR str = (LPSTR) AllocMemory(1024);
  69.                         LPSTR str2 = (LPSTR) AllocMemory(1024);
  70.  
  71.                         SetClassLong(hDlg, GCL_HICON, (long)LoadIcon(hInst, (LPCSTR)IDI_SMALL));
  72.     
  73.                         ltoa(REC_FREQ, str, 10);
  74.                         SendDlgItemMessage(hDlg, IDC_RECFREQ, WM_SETTEXT, strlen(str), (LPARAM)str);
  75.  
  76.                         _gcvt(log10(DYNAMIC_RANGE_SCALE * 100) * 10, 3, str);
  77.                         SendDlgItemMessage(hDlg, IDC_DYNAMIC_RANGE_SCALE, WM_SETTEXT, strlen(str), (LPARAM)str);
  78.  
  79.                         ltoa(REC_BASEBUFSIZE / 65536, str, 10);
  80.                         SendDlgItemMessage(hDlg, IDC_BASEBUFSIZE, WM_SETTEXT, strlen(str), (LPARAM)str);
  81.  
  82.                         ltoa(REC_BASEBUFSIZE / 65536 * 64, str, 10);
  83.                         strcpy(str2, "(");
  84.                         strcat(str2, str);
  85.                         strcat(str2, " KB)");
  86.                         SendDlgItemMessage(hDlg, IDC_BASEBUFSIZEBYTES, WM_SETTEXT, strlen(str2), (LPARAM)str2);
  87.  
  88.                         ltoa(NumSliders, str, 10);
  89.                         SendDlgItemMessage(hDlg, IDC_NUMSLIDERS, WM_SETTEXT, strlen(str), (LPARAM)str);
  90.  
  91.                         //******************************************************
  92.                         HWND hWnd = GetDlgItem(hDlg, IDC_RECPERIOD);
  93.  
  94.                         SendMessage(hWnd, CB_INSERTSTRING, -1, (LPARAM) (LPSTR) "256");
  95.                         SendMessage(hWnd, CB_INSERTSTRING, -1, (LPARAM) (LPSTR) "512");
  96.                         SendMessage(hWnd, CB_INSERTSTRING, -1, (LPARAM) (LPSTR) "1024");
  97.                         SendMessage(hWnd, CB_INSERTSTRING, -1, (LPARAM) (LPSTR) "2048");
  98.                         SendMessage(hWnd, CB_INSERTSTRING, -1, (LPARAM) (LPSTR) "4096");
  99.                         SendMessage(hWnd, CB_INSERTSTRING, -1, (LPARAM) (LPSTR) "8192");
  100.                         SendMessage(hWnd, CB_INSERTSTRING, -1, (LPARAM) (LPSTR) "16384");
  101.                         SendMessage(hWnd, CB_INSERTSTRING, -1, (LPARAM) (LPSTR) "32768");
  102.                         SendMessage(hWnd, CB_INSERTSTRING, -1, (LPARAM) (LPSTR) "65536");
  103.  
  104.                         //******************************************************
  105.  
  106.                         _gcvt(log10(DYNAMIC_TRESHOLD) * 10, 3, str);
  107.                         SendDlgItemMessage(hDlg, IDC_TRESHOLD,     WM_SETTEXT, strlen(str), (LPARAM) str);
  108.  
  109.                         if(!DynamicEqualizing) {
  110.                             SendDlgItemMessage(hDlg, IDC_DYNAMIC_EQUALIZING, BM_SETCHECK, BST_UNCHECKED, 0);
  111.                             SendDlgItemMessage(hDlg, IDC_TRESHOLD,     WM_ENABLE, 0, 0);
  112.                             EnableWindow(GetDlgItem(hDlg, IDC_BLUR_EQ), 0);
  113.                         }
  114.                         else {        
  115.                             SendDlgItemMessage(hDlg, IDC_DYNAMIC_EQUALIZING, BM_SETCHECK, BST_CHECKED, 0);
  116.                         }
  117.  
  118.                         if(BlurEQImpact) {
  119.                             SendDlgItemMessage(hDlg, IDC_BLUR_EQ, BM_SETCHECK, BST_CHECKED, 0);
  120.                         }
  121.  
  122.                         switch(REC_CHANNELS) {
  123.                             case 1:
  124.                                 SendDlgItemMessage(hDlg, IDC_MONO, BM_SETCHECK, BST_CHECKED, 0);
  125.                                 break;
  126.                             case 2:
  127.                             default:
  128.                                 SendDlgItemMessage(hDlg, IDC_STEREO, BM_SETCHECK, BST_CHECKED, 0);
  129.                         }
  130.                                 
  131.                         SendDlgItemMessage(hDlg, IDC_RECPERIOD, CB_SETCURSEL, (WPARAM)round((FLOAT)((COEF)log((COEF)REC_PERIOD / 256) / log(2))), 0);
  132.  
  133.                         switch(PROGRAM_PRIORITY) { 
  134.                             case IDLE_PRIORITY_CLASS:     SendDlgItemMessage(hDlg, IDC_PRIORITY_LOW,      BM_SETCHECK, BST_CHECKED, 0); break;
  135.                             case NORMAL_PRIORITY_CLASS:   SendDlgItemMessage(hDlg, IDC_PRIORITY_NORMAL,   BM_SETCHECK, BST_CHECKED, 0); break;
  136.                             case HIGH_PRIORITY_CLASS:     SendDlgItemMessage(hDlg, IDC_PRIORITY_HIGH,     BM_SETCHECK, BST_CHECKED, 0); break;
  137.                             case REALTIME_PRIORITY_CLASS: SendDlgItemMessage(hDlg, IDC_PRIORITY_REALTIME, BM_SETCHECK, BST_CHECKED, 0); break;
  138.                         }
  139.  
  140.                         FreeMemory(str);
  141.                         FreeMemory(str2);
  142.                     }
  143.                 return TRUE;
  144.  
  145.         case WM_COMMAND:
  146.             switch(LOWORD(wParam)) {
  147.                 case IDCANCEL:
  148.                         EndDialog(hDlg, 0);
  149.                     return TRUE;
  150.                 case IDOK:
  151.                         {
  152.                             if(EQThreadValid) {
  153.                                 EQThreadValid = FALSE;
  154.                                 // Wait for thread to terminate (EQThreadValid = TRUE)
  155.                                 while(EQThreadValid != TRUE);
  156.                                 EQThreadValid = FALSE;
  157.                                 CloseHandle(hEQThread);
  158.                             }
  159.  
  160.                             LPSTR str = (LPSTR) AllocMemory(1024);
  161.  
  162.                             REC_PERIOD = round((FLOAT)pow(2, SendDlgItemMessage(hDlg, IDC_RECPERIOD, CB_GETCURSEL, 0, 0)) * 256);
  163.                             SendDlgItemMessage(hDlg, IDC_BASEBUFSIZE, WM_GETTEXT, SendDlgItemMessage(hDlg, IDC_BASEBUFSIZE, WM_GETTEXTLENGTH, 0, 0) + 1, (LPARAM)str);
  164.                             REC_BASEBUFSIZE = atol(str) * 65536;
  165.  
  166.                             SendDlgItemMessage(hDlg, IDC_RECFREQ, WM_GETTEXT, SendDlgItemMessage(hDlg, IDC_RECFREQ, WM_GETTEXTLENGTH, 0, 0) + 1, (LPARAM)str);
  167.                             REC_FREQ = atol(str);
  168.                         
  169.                             SendDlgItemMessage(hDlg, IDC_DYNAMIC_RANGE_SCALE, WM_GETTEXT, SendDlgItemMessage(hDlg, IDC_DYNAMIC_RANGE_SCALE, WM_GETTEXTLENGTH, 0, 0) + 1, (LPARAM)str);
  170.                             DYNAMIC_RANGE_SCALE = pow(10, atof(str) / (FLOAT) 10) / (FLOAT) 100;
  171.                         
  172.                             SendDlgItemMessage(hDlg, IDC_NUMSLIDERS, WM_GETTEXT, SendDlgItemMessage(hDlg, IDC_NUMSLIDERS, WM_GETTEXTLENGTH, 0, 0) + 1, (LPARAM)str);
  173.                             NumSliders = atoi(str);
  174.  
  175.                             /*********************************************************************************************/
  176.                             if(SendDlgItemMessage(hDlg, IDC_MONO,   BM_GETCHECK, 0, 0) == BST_CHECKED) {
  177.                                 REC_CHANNELS = 1;
  178.                             }
  179.                             if(SendDlgItemMessage(hDlg, IDC_STEREO, BM_GETCHECK, 0, 0) == BST_CHECKED) {
  180.                                 REC_CHANNELS = 2;
  181.                             }
  182.  
  183.                             /*********************************************************************************************/
  184.                             if(SendDlgItemMessage(hDlg, IDC_PRIORITY_LOW,      BM_GETCHECK, 0, 0) == BST_CHECKED) {
  185.                                 PROGRAM_PRIORITY = IDLE_PRIORITY_CLASS; 
  186.                             }
  187.                             if(SendDlgItemMessage(hDlg, IDC_PRIORITY_NORMAL,   BM_GETCHECK, 0, 0) == BST_CHECKED) {
  188.                                 PROGRAM_PRIORITY = NORMAL_PRIORITY_CLASS;
  189.                             }
  190.                             if(SendDlgItemMessage(hDlg, IDC_PRIORITY_HIGH,     BM_GETCHECK, 0, 0) == BST_CHECKED) {
  191.                                 PROGRAM_PRIORITY = HIGH_PRIORITY_CLASS;
  192.                             }
  193.                             if(SendDlgItemMessage(hDlg, IDC_PRIORITY_REALTIME, BM_GETCHECK, 0, 0) == BST_CHECKED) {
  194.                                 PROGRAM_PRIORITY = REALTIME_PRIORITY_CLASS;
  195.                             }
  196.  
  197.                             if(SendDlgItemMessage(hDlg, IDC_DYNAMIC_EQUALIZING, BM_GETCHECK, 0, 0) == BST_CHECKED) {
  198.                                 DynamicEqualizing = TRUE;
  199.                             }
  200.                             else {
  201.                                 DynamicEqualizing = FALSE;
  202.                             }
  203.  
  204.                             SendDlgItemMessage(hDlg, IDC_TRESHOLD, WM_GETTEXT, SendDlgItemMessage(hDlg, IDC_TRESHOLD, WM_GETTEXTLENGTH, 0, 0) + 1, (LPARAM)str);
  205.                             DYNAMIC_TRESHOLD = pow(10, atof(str) / (FLOAT) 10);
  206.  
  207.                             if(SendDlgItemMessage(hDlg, IDC_BLUR_EQ, BM_GETCHECK, 0, 0) == BST_CHECKED) {
  208.                                 BlurEQImpact = TRUE;
  209.                             }
  210.                             else {
  211.                                 BlurEQImpact = FALSE;
  212.                             }
  213.  
  214.                             FreeMemory(str);
  215.                             EndDialog(hDlg, 1);
  216.                         }
  217.                     return TRUE;
  218.                 case IDC_RESET:
  219.                     {
  220.                         LPSTR str = (LPSTR) AllocMemory(1024);
  221.  
  222.                         ltoa(22050, str, 10);
  223.                         SendDlgItemMessage(hDlg, IDC_RECFREQ, WM_SETTEXT, strlen(str), (LPARAM)str);
  224.  
  225.                         _gcvt(14, 3, str);
  226.                         SendDlgItemMessage(hDlg, IDC_DYNAMIC_RANGE_SCALE, WM_SETTEXT, strlen(str), (LPARAM)str);
  227.  
  228.                         ltoa(1, str, 10);
  229.                         SendDlgItemMessage(hDlg, IDC_BASEBUFSIZE, WM_SETTEXT, strlen(str), (LPARAM)str);
  230.  
  231.                         ltoa(33, str, 10);
  232.                         SendDlgItemMessage(hDlg, IDC_NUMSLIDERS, WM_SETTEXT, strlen(str), (LPARAM)str);
  233.  
  234.                         SendDlgItemMessage(hDlg, IDC_MONO,   BM_SETCHECK, BST_UNCHECKED, 0);
  235.                         SendDlgItemMessage(hDlg, IDC_STEREO, BM_SETCHECK, BST_CHECKED,   0);
  236.  
  237.                         SendDlgItemMessage(hDlg, IDC_RECPERIOD, CB_SETCURSEL, 3, 0);
  238.  
  239.                         SendDlgItemMessage(hDlg, IDC_PRIORITY_LOW,      BM_SETCHECK, BST_UNCHECKED, 0);
  240.                         SendDlgItemMessage(hDlg, IDC_PRIORITY_NORMAL,   BM_SETCHECK, BST_CHECKED,   0);
  241.                         SendDlgItemMessage(hDlg, IDC_PRIORITY_HIGH,     BM_SETCHECK, BST_UNCHECKED, 0);
  242.                         SendDlgItemMessage(hDlg, IDC_PRIORITY_REALTIME, BM_SETCHECK, BST_UNCHECKED, 0);
  243.  
  244.                         _gcvt(log10(0.1) * 10, 3, str);
  245.                         SendDlgItemMessage(hDlg, IDC_TRESHOLD,     WM_SETTEXT, strlen(str), (LPARAM) str);
  246.  
  247.                         SendDlgItemMessage(hDlg, IDC_BLUR_EQ, BM_SETCHECK, BST_UNCHECKED,   0);
  248.  
  249.                         SendDlgItemMessage(hDlg, IDC_DYNAMIC_EQUALIZING, BM_SETCHECK, BST_UNCHECKED, 0);
  250.                         SendDlgItemMessage(hDlg, IDC_TRESHOLD,     WM_ENABLE, 0, 0);
  251.                         EnableWindow(GetDlgItem(hDlg, IDC_BLUR_EQ), TRUE);
  252.  
  253.                         FreeMemory(str);
  254.                     }
  255.  
  256.                     return TRUE;
  257.  
  258.                 case IDC_BASEBUFSIZE:
  259.  
  260.                     if(HIWORD(wParam) == EN_CHANGE) {
  261.  
  262.                         LPSTR str = (LPSTR) AllocMemory(1024);
  263.                         LPSTR str2 = (LPSTR) AllocMemory(1024);
  264.  
  265.                         SendDlgItemMessage(hDlg, IDC_BASEBUFSIZE, WM_GETTEXT, SendDlgItemMessage(hDlg, IDC_BASEBUFSIZE, WM_GETTEXTLENGTH, 0, 0) + 1, (LPARAM)str);
  266.  
  267.                         ltoa(atol(str) * 64, str, 10);
  268.                         strcpy(str2, "(");
  269.                         strcat(str2, str);
  270.                         strcat(str2, " KB)");
  271.                         SendDlgItemMessage(hDlg, IDC_BASEBUFSIZEBYTES, WM_SETTEXT, strlen(str2), (LPARAM)str2);
  272.  
  273.                         FreeMemory(str);
  274.                         FreeMemory(str2);
  275.  
  276.                     }
  277.  
  278.                     break;
  279.  
  280.                 case IDC_DYNAMIC_EQUALIZING:
  281.                         if(SendDlgItemMessage(hDlg, IDC_DYNAMIC_EQUALIZING, BM_GETCHECK, 0, 0) == BST_CHECKED) {
  282.                             SendDlgItemMessage(hDlg, IDC_TRESHOLD,     WM_ENABLE, 1, 0);
  283.                             EnableWindow(GetDlgItem(hDlg, IDC_BLUR_EQ), TRUE);
  284.                         }
  285.                         else {
  286.                             SendDlgItemMessage(hDlg, IDC_TRESHOLD,     WM_ENABLE, 0, 0);
  287.                             EnableWindow(GetDlgItem(hDlg, IDC_BLUR_EQ), FALSE);
  288.                         }
  289.                     break;
  290.  
  291.             }
  292.             break;
  293.     }
  294.  
  295.     return FALSE;
  296. }
  297.  
  298.